﻿Imports System.Runtime.InteropServices

Public Class xtf_ABMmensajeromensaje
    Private obj_mensajeroenvia As cls_mensajero_
    Private obj_mensajerorecibe As cls_mensajero_
    Private obj_mensajeromensaje_ As cls_mensajeromensaje_ = Nothing


    Private Sub Enviar()
        If txt_mensaje.Text <> "" Then
            obj_mensajeromensaje_.fechaenvia = Now
            obj_mensajeromensaje_.idusuarioenvia = obj_mensajeroenvia.idusuario
            obj_mensajeromensaje_.idusuariorecibe = obj_mensajerorecibe.idusuario
            obj_mensajeromensaje_.pendiente = True
            obj_mensajeromensaje_.mensaje = txt_mensaje.Text
            If obj_mensajeromensaje_.Nuevo Then
                If txt_historial.Text = "" Then
                    txt_historial.Text = obj_mensajeroenvia.usuario.ToString & " dice: " & vbNewLine & txt_mensaje.Text
                Else
                    txt_historial.Text &= vbNewLine & obj_mensajeroenvia.usuario.ToString & " dice: " & vbNewLine & txt_mensaje.Text
                End If
            Else
                txt_historial.Text &= vbNewLine & "El mensaje no se pudo entregar al destinatario."
            End If
            txt_historial.SelectionStart = txt_historial.Text.Length
            txt_historial.ScrollToCaret()
            txt_mensaje.Text = ""
        End If
    End Sub

    Public Sub New(ByRef prm_mensajeroenvia As cls_mensajero_, ByRef prm_mensajerorecibe As cls_mensajero_)
        ' This call is required by the designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.
        obj_mensajeroenvia = prm_mensajeroenvia
        obj_mensajerorecibe = prm_mensajerorecibe
        Me.Text = prm_mensajerorecibe.usuario.ToString & " (" & prm_mensajerorecibe.estado.ToString("G") & ")"
        obj_mensajeromensaje_ = New cls_mensajeromensaje_
        tmr_mensajes.Enabled = True
        'tmr_mensajes_Tick(Nothing, Nothing)
    End Sub

    Private Sub tmr_mensajes_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmr_mensajes.Tick
        Me.Text = obj_mensajerorecibe.usuario.ToString & " (" & obj_mensajerorecibe.estado.ToString("G") & ")"
        If obj_mensajeromensaje_.CargarXidusuariorecibeXidusuarioenviaPENDIENTES(obj_mensajeroenvia.idusuario, obj_mensajerorecibe.idusuario) Then
            For Each mensaje As cls_mensajeromensaje_ In obj_mensajeromensaje_.Items
                If txt_historial.Text = "" Then
                    txt_historial.Text = obj_mensajerorecibe.usuario.ToString & " dice: " & vbNewLine & mensaje.mensaje
                Else
                    txt_historial.Text &= vbNewLine & obj_mensajerorecibe.usuario.ToString & " dice: " & vbNewLine & mensaje.mensaje
                End If
                mensaje.fecharecibe = Now
                mensaje.pendiente = False
                mensaje.Modificar()
                txt_historial.SelectionStart = txt_historial.Text.Length
                txt_historial.ScrollToCaret()
                If IsNothing(Form.ActiveForm) Then
                    Dim fwFlash As New FlashWindow
                    fwFlash.FlashWindow(Me, FlashWindow.enuFlashOptions.FLASHW_ALL, 9999)
                    My.Computer.Audio.Play(My.Resources.mensaje, AudioPlayMode.Background)
                Else
                    If Form.ActiveForm.Handle <> Me.Handle Then
                        Dim fwFlash As New FlashWindow
                        fwFlash.FlashWindow(Me, FlashWindow.enuFlashOptions.FLASHW_ALL, 9999)
                        My.Computer.Audio.Play(My.Resources.mensaje, AudioPlayMode.Background)
                    End If
                End If
            Next
        End If
        obj_mensajeromensaje_.Items = Nothing
    End Sub

    Private Sub txt_mensaje_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_mensaje.KeyDown
        If e.Shift = False And e.KeyCode = Keys.Enter Then
            e.SuppressKeyPress = True
            Enviar()
        End If
    End Sub

    Private Sub xtf_ABMmensajeromensaje_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        Dim fwFlash As New FlashWindow
        fwFlash.FlashWindow(Me, FlashWindow.enuFlashOptions.FLASHW_STOP, 9999)
        txt_mensaje.Focus()
    End Sub

    Private Sub xtf_ABMmensajeromensaje_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        obj_mensajerorecibe.ABMmensajeromensaje = Nothing
        Me.Dispose()
    End Sub

    Private Sub btn_cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cerrar.Click
        Me.Close()
    End Sub

  
End Class



Public Class FlashWindow

    Public Enum enuFlashOptions As UInteger
        FLASHW_ALL = &H3 ' Flash both the window caption and taskbar button. 
        ' This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags. 
        FLASHW_CAPTION = &H1 ' Flash the window caption. 
        FLASHW_STOP = 0 ' Stop flashing. The system restores the window to its original state. 
        FLASHW_TIMER = &H4 ' Flash continuously, until the FLASHW_STOP flag is set. 
        FLASHW_TIMERNOFG = &HC ' Flash continuously until the window comes to the foreground. 
        FLASHW_TRAY = &H2
    End Enum

    Public Structure FlashWindowInfo
        Public cbSize As Integer
        Public hwnd As IntPtr
        Public dwFlags As UInteger
        Public uCount As UInteger
        Public dwTimeout As UInteger
    End Structure
    Declare Function FlashWindowEx Lib "user32.dll" (ByRef pInfo As FlashWindowInfo) As Boolean

    Public Sub FlashWindow(ByVal frmForm As Form, _
    ByVal FlashWindowInfoFlags As enuFlashOptions, _
    Optional ByVal intFlashTimes As UInteger = 5)
        Dim info As FlashWindowInfo
        With info
            .cbSize = Marshal.SizeOf(info)
            .dwFlags = FlashWindowInfoFlags ' See enumeration for flag values 
            .dwTimeout = 0 'Flash rate in ms or default cursor blink rate 
            .hwnd = frmForm.Handle()
            .uCount = intFlashTimes ' Number of times to flash 
        End With
        FlashWindowEx(info)
    End Sub

    Public Sub Flashhash(ByVal frmForm As System.IntPtr, _
   ByVal FlashWindowInfoFlags As enuFlashOptions, _
   Optional ByVal intFlashTimes As UInteger = 5)
        Dim info As FlashWindowInfo
        With info
            .cbSize = Marshal.SizeOf(info)
            .dwFlags = FlashWindowInfoFlags ' See enumeration for flag values 
            .dwTimeout = 0 'Flash rate in ms or default cursor blink rate 
            .hwnd = frmForm
            .uCount = intFlashTimes ' Number of times to flash 
        End With
        FlashWindowEx(info)
    End Sub
End Class